import Dep from "./dep";

export default class Watcher {
  /**
   *
   * @param {*} vm vue实例
   * @param {*} key data中的属性名
   * @param {*} cb 复杂更新视图的回调函数
   */
  constructor(vm, key, cb) {
    this.vm = vm;
    this.key = key;
    this.cb = cb;

    Dep.target = this;

    // 触发getter方法，在get方法里做依赖收集
    this.oldVal = vm[key];

    Dep.target = null; // 及时清除绑定
  }

  /** 当数据变化的时候更新视图 */
  update() {
    let newVal = this.vm[this.key];
    if (this.oldVal === newVal) return;
    this.cb(newVal);
  }
}
